package com.macro.douyinpay.utils;

import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.URL;
import java.time.Duration;
import java.util.Set;

/**
 * @author macro
 * @version 1.0
 * @className AutoUtil
 * @date 2024/9/13
 * @description TODO
 */
public class AutoUtil {

    //lenovo电脑浏览器驱动路径
    static String driverPath = "C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chromedriver.exe";

    static WebDriver driver;

    public static void loadDriver() throws InterruptedException {
        //指定路径
        System.setProperty("webdriver.chrome.driver", driverPath);
        /*=====浏览器配置=====*/
        ChromeOptions chromeOptions = new ChromeOptions();
        //解决 403 出错问题
        chromeOptions.addArguments("--remote-allow-origins=*");
        // 设置用户数据目录
        chromeOptions.addArguments("user-data-dir=/path/to/your/custom/profile");
        driver = new ChromeDriver(chromeOptions);
    }

    public static void wait2() {
        // Google 搜索结果由 JavaScript 动态渲染
        // 等待页面加载完毕，超时时间设为10秒
        (new WebDriverWait(driver, Duration.ofSeconds(1000))).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

    }

    public static void saveAllCookies() {
        // 输出当前 url 所有可用的 cookie
        Set<Cookie> allCookies = driver.manage().getCookies();
        for (Cookie loadedCookie : allCookies) {
            System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));
            Cookie cookie = new Cookie(loadedCookie.getName(), loadedCookie.getValue());
            driver.manage().addCookie(cookie);
        }

    }

    /**
     * 当前是否登录（根据指定的CSS选择器是否存在于页面上）
     */
    public static void ifUnLogin() {
        // 构建CSS选择器
        String selector = "#root > div > div.page-box.douyin > div > div.login-container > div.login-title";
        // 检查选择器是否存在
        boolean exists = !driver.findElements(By.cssSelector(selector)).isEmpty();
        // 输出结果
        System.out.println("选择器 '" + selector + "' 存在: " + exists);
        //等待-登陆成功后的切换账号按钮
//        wait1();
        //

    }

    public static void wait1() {
        String selectAccSelector = "#root > div > div.page-box.douyin > div > div.user-info > div.btn";
        // 创建WebDriverWait实例，设置超时时间
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3000));
        // 循环检查选择器是否出现
        while (true) {
            // 检查选择器是否出现
            boolean isDisplayed = wait.until(driver -> {
                try {
                    return driver.findElement(By.cssSelector(selectAccSelector)).isDisplayed();
                } catch (org.openqa.selenium.NoSuchElementException e) {
                    return false;
                }
            });

            if (isDisplayed) {
                System.out.println("出现了");
                // 选择器出现，调用test方法
                test();
                break; // 跳出循环
            } else {
                // 选择器没有出现，打印消息并继续等待
                System.out.println("选择器 '" + "' 还没有出现，继续等待...");
            }
        }
    }


    public static void test() {
        System.out.println("选择器出现，执行测试方法。");
        // 在这里添加你的测试代码
    }


    /**
     * 未登录则一直监听
     */
    public static void unLoginWatch() {

    }
}